package control_package;

import Entitys.Factura;
import Entitys.Pedido;
import Entitys.ProductoGeneral;
import java.util.Date;
import java.util.List;
import services.FabricanteServices;
import services.FacturaServices;
import services.PedidoServices;
import services.ProductoGeneralServices;
import services.TipoProductoServices;



// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.F8BF7ADA-8F59-C49C-A2CE-C69593DA3EEB]
// </editor-fold> 
public class BussinesControl {
     ProductoGeneralServices pGS=new ProductoGeneralServices();
     FabricanteServices fS=new FabricanteServices();
     TipoProductoServices tS=new TipoProductoServices();
     FacturaServices fcS =new FacturaServices();
     PedidoServices ps=new PedidoServices();
    

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.5D1257B0-D356-AA18-E636-C17E7A76CAB8]
    // </editor-fold> 
    public BussinesControl () {
    }
    
    public List<String> DedicatedSearch(String SubString){
        return pGS.DedicatedQuery(SubString);
    }
    
    public String verifyProductToSell(Long Id, int Quanty){
        int can=this.MakeQuery(Id).getCantidadProducto();
//        if(this.MakeQuery(Id)==null){
//            return "producto no encontrado";
//        }
        if(Quanty > can){
            int excess=Quanty - can;
            return " Ops.. la cantidad supera "+ excess + " unidades a la existente" ;
        }if(Quanty==can){
           return "Quedan 0 productos en el inventario";
        }
        return "0";
    }
    
    public String verifyProductToSell(Long Id,String name, int Quanty){
        int can=this.MakeQuery(Id,name).getCantidadProducto();
        if(Quanty==4)
        assert can==0: can;
        if(this.MakeQuery(Id,name)==null){
            return "producto no encontrado";
        }
        if(Quanty > can){
            int excess=Quanty - can;
            return " Ops.. la cantidad supera "+ excess + " unidades a la existente" ;
        }if(Quanty==can){
           return "Quedan 0 productos en el inventario";
        }
        return "0";
    }
    
     
    
//  Este método se encarga de llamar el servicio de hacer la consulta del producto con el identificador específico
    public ProductoGeneral MakeQuery(Long Id){
        return pGS.ReadById(Id);
    }
//  Este método se encarga de llamar el servicio de hacer la consulta del pedido con el identificador específico    
    public Pedido MakeQuery(Object id){
        return ps.ReadById(id);
    }
// Este método se encarga de llamar el servicio de hacer la consulta de productos por nombre   
    public List<ProductoGeneral> MakeQuery(String name){
            return pGS.ReadByName(name);
    }
// Este método se encarga de llamar al servicio de hacer la consulta delproducto con un identificador y nombre    
    public ProductoGeneral MakeQuery(Long Id,String name){
           return pGS.ReadByIdAndName(Id, name);
    }
    
    
    
    public int MakeSell(Long Id, Object amount){
     return pGS.Update(Id, amount, false);   
    }
    
    public String SearchNameById(Long idpr){
            return pGS.ReadNameById(idpr);
    }
    
    public Object SearchIdByName(String nomp){
            return pGS.readIdByName(nomp);
    }
    
    public List<Factura> SearchFacturesTodey(){
    return fcS.readFacturesToday(new Date());
    
    }


    
    //This method return the function that brings the names of drugStores for the products is avaliable
    public List<String> getDrugsForProduct(Long Id){
            return pGS.ReadNamesDrugStoreForSpecificProduct(Id);
    }
    //this return the vendor name
    public String searchVendorName(Long id){
            return fS.readVendorName(id);
    }
    //RETURNS THE TIPE OF THE PRODUCT CORRESPONDIGN TO THE ID GIVEN
    public String searchTypeName(Long id){
            return tS.readTypeName(id);
    }
    
    

    public void newFacture(Long idLogged, float parseFloat) {
        Factura fac=new Factura(idLogged, parseFloat,new Date());
        fcS.create(fac);
    }

    public int MakeInventary(Long Id, Object amount) {
        return pGS.Update(Id, amount, true);
    }
    
    
}

